package com.tecnoagrosoft.zafra.control.activity.fragment;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import com.tecnoagrosoft.zafra.control.activity.R;
import com.tecnoagrosoft.zafra.control.activity.AplicacionActivity;
import com.tecnoagrosoft.zafra.control.db.GenericManager;
import com.tecnoagrosoft.zafra.control.db.GestorDB;
import com.tecnoagrosoft.zafra.control.model.android.ItemsList;
import com.tecnoagrosoft.zafra.control.utils.AdaptadorList;
import com.tecnoagrosoft.zafra.control.utils.UtilsGeneric;

@SuppressLint({ "SimpleDateFormat", "DefaultLocale" })
public class AplicacionFragment extends Fragment implements SearchView.OnQueryTextListener {

	View rootView;
	private ListView lista;
	GestorDB gestorDB;
	DecimalFormat formateador = new DecimalFormat("#,###.###");
	AdaptadorList adapter;
	private SearchView mSearchView;
	private boolean showSearch = true;

	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		rootView = inflater.inflate(R.layout.fragment_aplicacion, container, false);
		ImageButton btnShowSearch = (ImageButton) rootView.findViewById(R.id.imageButtonShowSearch);
		btnShowSearch.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				if (showSearch) {
					showSearch = false;
					mSearchView.setVisibility(View.VISIBLE);
				} else {
					showSearch = true;
					mSearchView.setVisibility(View.GONE);
				}

			}
		});

		mSearchView = (SearchView) rootView.findViewById(R.id.search_view_aplicaciones);
		mSearchView.setVisibility(View.GONE);
		loadtable();
		setupSearchView();

		return rootView;
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);

		// escucho la respuesta de la actividad
		if (resultCode == Activity.RESULT_OK) {

			loadtable();

		}

	}

	private void loadtable() {

		ArrayList<ItemsList> datos = new ArrayList<ItemsList>();

		// contexto del activity
		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);

		String[] columns = { "_id", "seguimiento_de_parcela_id", "costo_personal", "costo_insumo", "fecha_aplicacion", "total_general", "descripcion",
				"finalizado", "aplicacion_tipo_id","is_delete" };
		String[] columnsSeguimiento = { "_id", "descripcion" };
		Cursor c = gM.getObjectWhereByOrder("aplicacion", columns, "finalizado=0 and is_delete=0", "fecha_aplicacion DESC");

		String descripcion, titulo = "";
		DateFormat dfMostrar = DateFormat.getDateInstance(DateFormat.FULL);

		DateFormat df = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
		Date fechaCreacion = null;

		if (c.moveToFirst()) {
			do {

				try {

					fechaCreacion = df.parse(c.getString(c.getColumnIndex("fecha_aplicacion")));
				} catch (ParseException e) {
					Log.e(getString(R.string.falloParseo), c.getString(c.getColumnIndex("fecha_aplicacion")));
				}

				Cursor cs = gM.getObjectById("seguimiento_de_parcela", columnsSeguimiento, c.getInt(c.getColumnIndex("seguimiento_de_parcela_id")));

				titulo = UtilsGeneric.createDescripcion(cs.getString(cs.getColumnIndex("descripcion")));
				descripcion = getString(R.string.totalGeneral).toUpperCase() + ": " + formateador.format(c.getLong(c.getColumnIndex("total_general"))) + " - "
						+ dfMostrar.format(fechaCreacion);

				if (c.getInt(c.getColumnIndex("aplicacion_tipo_id")) == 7) {

					String[] columnsCargas = { "_id", "seguimiento_de_parcela_id", "carga", "descripcion" };
					Cursor cargas = gM.getObjectWhere("cargas_camion", columnsCargas,
							" seguimiento_de_parcela_id=" + c.getInt(c.getColumnIndex("seguimiento_de_parcela_id")));
					if (cargas.moveToFirst()) {

						Long resul = (long) 0.0;
						do {
							resul += cargas.getLong(cargas.getColumnIndex("carga"));
						} while (cargas.moveToNext());
						descripcion += " - " + getString(R.string.men_seguimiento_loadtable_pesoCargas) + ": " + formateador.format(resul);
					} else {
						descripcion += " - " + getString(R.string.men_seguimiento_loadtable_noPesoCargas);
					}

				}
				cs.close();

				datos.add(new ItemsList(Integer.parseInt(c.getString(0)), UtilsGeneric.getImageAplicacion(c.getInt(c.getColumnIndex("aplicacion_tipo_id"))), titulo, descripcion));

			} while (c.moveToNext());
		} else {
			datos.add(new ItemsList(0, R.drawable.aplicacion, getString(R.string.noAplicacion), ""));
		}

		// cierro la conexion
		gM.close();
		gestorDB.close();

		lista = (ListView) rootView.findViewById(R.id.ListView_aplicaciones);
		lista.setAdapter(new AdaptadorList(rootView.getContext(), R.layout.item_list, datos) {
			@Override
			public void onEntrada(Object entrada, View view) {
				if (entrada != null) {
					TextView texto_id_item = (TextView) view.findViewById(R.id.texto_item_id);
					if (texto_id_item != null)
						texto_id_item.setText(((ItemsList) entrada).getId().toString());

					TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textoTitulo_item_list);
					if (texto_superior_entrada != null)
						texto_superior_entrada.setText(((ItemsList) entrada).getTextoTitulo());

					TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textoDescripcion_item_list);
					if (texto_inferior_entrada != null)
						texto_inferior_entrada.setText(((ItemsList) entrada).getTextoDescripcion());

					ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imagen_item_list);
					if (imagen_entrada != null)
						imagen_entrada.setImageResource(((ItemsList) entrada).getIdImagen());
				}
			}
		});

		lista.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {
				ItemsList elegido = (ItemsList) pariente.getItemAtPosition(posicion);

				if (elegido.getId() != 0) {
					Intent i = new Intent(rootView.getContext(), AplicacionActivity.class);
					i.putExtra("id", elegido.getId());
					startActivity(i);
				}

			}
		});

		adapter = (AdaptadorList) lista.getAdapter();

	}

	private void setupSearchView() {
		mSearchView.setIconifiedByDefault(false);
		mSearchView.setOnQueryTextListener(this);
		mSearchView.setSubmitButtonEnabled(true);
		mSearchView.setQueryHint(getResources().getString(R.string.btn_search));

	}

	@Override
	public boolean onQueryTextChange(String newText) {

		if (TextUtils.isEmpty(newText)) {
			adapter.getFilter().filter("");
			lista.clearTextFilter();
		} else {

			// lista.setFilterText(newText.toString());

			lista.setTextFilterEnabled(true);
			lista.setSelectionAfterHeaderView();

			adapter.getFilter().filter(newText);

		}
		return true;
	}

	@Override
	public boolean onQueryTextSubmit(String arg0) {
		// TODO Auto-generated method stub
		return false;
	}

	
}
